package org.langqiao.algorithm;
/*
 * 任意一个5位数，比如：34256，把它的各位数字打乱，重新排列，
 * 可以得到一个最大的数：65432，一个最小的数23456。求这两个数字的差，
 * 得：41976，把这个数字再次重复上述过程（如果不足5位，则前边补0）。如此往复，数字会落入某个循环圈（称为数字黑洞）。
比如，刚才的数字会落入：[82962, 75933, 63954, 61974] 这个循环圈。
 
请编写程序，找到5位数所有可能的循环圈，并输出，每个循环圈占1行。其中5位数全都相同则循环圈为 [0]，这个可以不考虑。
循环圈的输出格式仿照：
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
 */
import java.util.Scanner;
public class HeiDong1 {
//	private static int[] a=new int[5];//定义一个数组，用来表示这个5位数的每一位
	private static int last=0,n=0;
	public static void main(String[] args){
		
		System.out.println("请输入一个四位数：");
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		do
		{
			last=n;//只要n！=last就调用f(n)方法
			n=f(n);
		}while(n!=last);
	}
	public static int f(int m)//处理5位数n
	{
		int[] a=new int[5];//定义一个数组，用来表示这个5位数的每一位
		int i=0,j=0;
		int max=0,min=0;//定义由这5个数字组成的最大的 数和最小的数
		for(i=0;i<5;i++)//分离出这个数各个位上的数
		{
			a[i]=m%10;
			m=m/10;
		}
		for(i=0;i<5;i++)//将各位上的数字按从小到大排序
		{
			for(j=i+1;j<5;j++)
			{
				if(a[i]>a[j])
				{
					int t=a[i];
					a[i]=a[j];
					a[j]=t;
				}
			}
		}
		max=a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];
		min=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
		m=max-min;
		System.out.println(m);
		return m;
	}
}

